package test04.method;



import entity.Student;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;

/**
 * 反射 API 操作 - 方法操作 - Method
 *
 * @Author zqx
 * @Date 2024-03-26
 */
public class MainTest01 {
    public static void main(String[] args) throws Exception {
        // 第一：获取类的 Class 对象
        Class<Student> clazz = Student.class;

        // 第二：获取类的所有方法
        // 1.获取所的公开方法
        // Method[] methods = clazz.getMethods();

        Method[] methods = clazz.getDeclaredMethods();
        // public void setName(String name)
        for (Method method : methods) {
            // 1.方法修饰符 - 整数表示
            int intModifiers = method.getModifiers();
            // 2.方法修饰符 - 字符串表示
            String strModifiers = Modifier.toString(intModifiers);
            // 3.方法名称
            String methodName = method.getName();
            // 4.方法参数
            Parameter[] parameters = method.getParameters();

            System.out.println("方法修饰符 - 整数表示:" + intModifiers);
            System.out.println("方法修饰符 - 字符串表示:" + strModifiers);
            System.out.println("方法名称:" + methodName);
            // 遍历参数数组
            for (Parameter parameter : parameters) {
                // 1.获取参数类型
                String parameterTypeName = parameter.getType().getSimpleName();
                // 2.获取参数名称 - arg0、arg1、...
                String parameterName = parameter.getName();
                System.out.println("\t获取参数类型：" + parameterTypeName);
                System.out.println("\t获取参数名称：" + parameterName);
            }
            System.out.println("-------------");
        }


    }
}
